Skip to content

Inboxの理解

aosでは、プロセスはハンドラーを介してメッセージに応じて実行されます。未処理のメッセージはプロセスのInboxにルーティングされます。

ハンドラーとは?

ハンドラーは、プロセス内でメッセージを受信して評価する関数です。メッセージをパラメーターとして受け取り、それに基づいて動作します。

lua
function main(Message, ao)
  ...dostuff
  return {
    Output = ...,
    Messages = {},
    Spawns = {}
  }

end

main関数は、Luaのテーブルを返し、OutputMessagesSpawnsまたはErrorを提供します。aosを使用すると、ハンドラーを使用してプロセスに機能を追加できます。ハンドラーは3つのパラメーターを取ります:

  1. ハンドラーの名前
  2. マッチャー関数
  3. ハンドル関数
lua
Handlers.add("name",
  function (Msg)
    -- Does this message match (return true or false)
    return Msg.Action == "Register"
  end,
  function (Msg)
    print("Registered User.")
    table.insert(Members, Msg.From)
    ao.send({Target = Msg.From, Data = "Registered."})
  end
)

Inboxについては?

Inboxは、まだ処理されていないメッセージのためのストレージエリアです。受信アイテムの処理を待つ「保持ゾーン」と考えてください。メッセージが処理されると、もはや「受信」扱いではなくなり、Inboxを離れます。

例: Inboxはボイスメールのようなものです。未対応の電話がボイスメールに転送されて後で対応されるのと同様に、プロセスがすぐに処理しないメッセージはInboxに送られます。このようにして、未処理のメッセージは、処理する準備が整うまで保存されます。

概要

最初は、すべてのメッセージがInboxに届くように見えるかもしれませんが、処理された後に消えると混乱を招くことがあります。ボイスメールのアナロジーを考えると、応答した電話がボイスメールに行かないのと同じように、処理したメッセージはInboxに表示されないということが明らかになります。これにより、Inboxとハンドラーの両方の役割が示されます。